/*
 * Copyright (c) 2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import 'package:flutter/material.dart';
import 'package:hadss_uni_input/hadss_uni_input.dart';

class PanExample extends StatefulWidget {
  const PanExample({super.key});

  @override
  PanExampleState createState() => PanExampleState();
}

class PanExampleState extends State<PanExample> {
  final panDirection = PanDirection.all.value;
  final double _scale = 1.0;
  final double _rotation = 0.0;
  Offset _offset = Offset.zero;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('滚动平移'),
        leading: IconButton(
          icon: const Icon(Icons.arrow_back),
          onPressed: () {
            Navigator.pop(context);
          },
        ),
      ),
      body: UnifiedGestureDetector(
        pointerOptions:
            PointerOptions(enablePan: true, panDirection: panDirection),
        onPanStart: onPanStart,
        onPanUpdate: onPanUpdate,
        onPanEnd: onPanEnd,
        onPanCancel: onPanCancel,
        child: Material(
          child: Center(
            child: Transform(
              alignment: Alignment.center,
              transform: Matrix4.identity()
                ..translate(_offset.dx, _offset.dy)
                ..rotateZ(_rotation)
                ..scale(_scale),
              child: Container(
                width: 200,
                height: 200,
                color: Colors.green,
                alignment: Alignment.center,
                child: const Text(
                  '滚动平移',
                  style: TextStyle(fontSize: 30),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }

  void onPanStart(GestureEvent event) {}

  void onPanUpdate(GestureEvent event) {
    if (event.offsetX == null || event.offsetY == null) {
      return;
    }
    setState(() {
      _offset = Offset(event.offsetX!, event.offsetY!);
    });
  }

  void onPanEnd(GestureEvent event) {}

  void onPanCancel(GestureEvent event) {
    showDialog(
        context: context,
        builder: (BuildContext context) {
          return const AlertDialog(
            title: Text('滚动取消'),
          );
        });
  }
}
